node.js

Node.js 是一个基于 Chrome V8 的 JavaScript 运行环境,这也让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言对等的脚本语言之一。Node.js 能够在服务端运行 JavaScript 的代码和跨平台环境,因此在 node.js 出现以前,JavaScript 经常作为客户端程序设计语言使用。

ECMAScript 是 JavaScript 最初的名字,他由网景公司的 Brendan Eich 所开发的一种脚本语言标准化规范,历经 Mocha、LiveScript 最终成为 JavaScript,并在 1995年由 Sun 正式联合发布 JavaScript

获取 Node.js 的方法非常简单,我们以 Debian Linux 发行版系为例,通过 https://nodejs.org/zh-cn/ 访问 node.js 的官方站点进行下载你需要的版本(本书版本为 10),解压 tar.xz 文件后进入其 bin 目录,比昂通过 ln 建立软链接到 /usr/bin 中,最后通过其 node -v 来查看是否软链接建立成功

1
2
ln node /usr/bin/node
ln npm /usr/bin/node

JavaScript vs Node.js

JavaScript 他本身是一个客户端程序设计语言,因此针对的也是 DOM、BOM、ECMAScript 组合而成,因此针对的也是前端部分,而 Node.js 他主要通过 ECMAScript、OS、File、Net、Databases 等五个部分,分别实现了 JavaScript 语法基础、操作系统交互、文件系统、网络系统和数据库,这也是后端语言最为常用的几个部分,因此他可以脱离浏览器来运行 JavaScript 的项目。

脚本文件运行

创建名称为 hey.js 的文件后,写入 DOM 语法并通过 node.js 来进行运行

1
2
3
4
console.log("Hello,world!")

$ node hey.js
Hello,world!

交互式环境执行

1
2
3
4
5
$ node
> console.log("Hello,world!")
Hello,world!
undefined
>

构建 Node.js 项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const http = require('http');

const hostname = '127.0.0.1';
const port = 8210;

const server = http.createServer((req,res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello,world!\n');
});

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

至此通过 node index.js 即可运行一个简单的 node 项目,之后点击或访问 console.log 的输出来访问项目视图:http://127.0.0.1:8210/

WebStorm 如果不支持 Node.js 相关语法可以通过在 File -> Setting -> Languages & Frameworks -> JavaScript -> Libraries 内下载 node 语法支持

NPM

NPM(Node Package Manager)Node 包管理器,是 node.js 默认的依赖项之一,通常会随着 node.js 一起被安装,完全由 JavaScript 写成,最初由 lsaac Z.Schlueter 进行开发,2020 年 3 月 16 日 被 Github 收购。

node.js 维护的包管理器允许开发者下载\安装\上传他人\自己编写的第三方包到本地使用\他人使用。

NPM 的包注册(Register)也被称之为 “JavaScript 包注册表”,为了按照名称和版本来解析包,因此 nmp 采用了 CommonJS 包注册规范,这就导致了每个包都会存在一个 Json 格式的元文件。

NPM 名称以 “先到先得” 的原则进行注册,这就不会导致各个模块的名称不会发生错乱,但一旦有人撤回了自己所发布的包,就会导致依赖这个包的项目的对应功能也会出现问题。

你可以通过 nmp -v 的方式来查看版本以及是否正常安装,也可以使用 nmp install npm -g 让其进行升级。

package.json

一个项目中如果存在 package.json 文件,那么可以使用 npm install 命令来自动安装和维护所需要的依赖包,你可以通过使用 npm init 来初始化一个 package.json 文件。

Id Name
name 包名
version 包的版本号采用了语义版本号 X(住版本号).Y(次版本号).Z(补丁版本号) 三位
description 包的描述
main 指定程序的入口文件
scripts 指定了运行脚本命令的 npm 命令行缩写
repository 代码仓库位置
keywords 关键词
author 包作者的名字
license 开源许可证,默认为 (ISC)

package.json 文件可以手写也可以通过 npm init 进行生成(就是回答一些问题后自行进行创建)

从而可以快速体验工作空间以及脚本外壳的使用,因此你需要在初始化后的 CommonJS 包中添加或修改一出信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"name": "demo",
"version": "1.0.0",
"description": "node demo",
"main": "index.js",
"scripts": {
"test": "node index.js"
},
"repository": {
"type": "git",
"url": "https://gitee.com/sif_one/node-demo"
},
"keywords": [
"null"
],
"author": "sun likun",
"license": "ISC"
}

有了 package.json 文件后,可以直接通过 npm install 进行安装所需要的包(在 dependencires 字段中写了),也可以通过指定安装依赖并写入字段的方法进行完善

npm install express --save 参数将所需依赖写入 package.json 文件中的 dependencies 属性中。

同样的还提供了写入 devDependencies 属性中的参数 --save-dev

package.json 中,如果在 script 字段内定义 js 脚本文件,即可通过 npm run test 进行运行,此时也就同等于 node index.js

当然也可以通过使用 rpm run 来查看当前项目所有的 NPM 脚本命令,因为执行该命令时会执行指定的脚本命令,因此只要是 Shell 可以运行的都可以写在 NPM 脚本中。

在大的项目中, npm run 会在 node_modules/.bin 子目录中加入变量,因此在该目录中的所有脚本都可以字节使用脚本的名称而不需要写成绝对路径。

常用命令

Id Name Info
1 npm install express 安装某一个模块
-g 全局安装这个模块(也就是说直接在 /user/local/bin 内直接关联)
2 npm uninstall name 卸载安装的所有模块
--savedependencires 为目标进行卸载
--save-devdevDependencies 为目标进行卸载
--no-save 不会将 package.json 中进行删除依赖
3 npm update express 更新模块
4 npm outdated 检查模块版本
5 npm list 查看本地安装的模块
-g 查看全局安装的模块
6 npm search express 搜索模块
7 npm cache clean 清除 NPM 本地缓存
8 npm start/restart 启动/重启模块

本文使用《江雪分析公开知识存储库知识共享许可证》进行发布